<?php

//yield关键字作为表达式使用时

/**
 * 协程是向发送数据给生成器
 * @param $fileName
 */
function logger($fileName) {
    $fd = fopen($fileName, 'a+');
    while(true) {
        fwrite($fd, yield . "\n");  //在这里yield没有作为语句使用而是作为一个表达式，他有一个返回值
    }
}
$logger = logger(__DIR__ . '/log.txt');
$logger->send('FOo');
$logger->send('bar');


//第二个例子

function gen()
{
    $ret = (yield 'yield1');
    var_dump($ret);
    $ret = (yield 'yield2');
    var_dump($ret);
}
$gen = gen();
var_dump($gen->current());
var_dump($gen->send('ret1'));
var_dump($gen->send('ret2'));

function gen2()
{
    yield '1';
    yield '2';
}
$gen2 = gen2();
var_dump($gen2->send('something'));
//$gen->rewind();
var_dump($gen2->send('something2'));